﻿//
// ParallelGrep
//
// Copyright (C) 2011 - Tatsuya Niioka
//
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Controls;
using System.Windows.Interactivity;
using Microsoft.Expression.Interactivity;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;

namespace ParallelGrep.Behavior
{
    /// <summary>
    /// ウィンドウファイルドロップ ビヘイビアクラス
    /// </summary>
    public class WindowFileDropBehavior : Behavior<Window>
    {
        #region Command
        /// <summary>
        /// コマンドを取得または設定します。
        /// </summary>
        public ICommand Command
        {
            get
            {
                return (ICommand)GetValue(CommandProperty);
            }
            set
            {
                SetValue(CommandProperty, value);
            }
        }
        #endregion

        #region CommandProperty
        /// <summary>
        /// コマンドプロパティを取得します。
        /// </summary>
        public static readonly DependencyProperty CommandProperty =
                                    DependencyProperty.Register("Command",
                                        typeof(ICommand),
                                        typeof(WindowFileDropBehavior));
        #endregion

        #region OnAttached
        /// <summary>
        /// アタッチ処理を実行します。
        /// </summary>
        protected override void OnAttached()
        {
            base.OnAttached();

            this.AssociatedObject.Drop += OnDrop;
        }
        #endregion

        #region OnDetaching
        /// <summary>
        /// デタッチ処理を実行します。
        /// </summary>
        protected override void OnDetaching()
        {
            base.OnDetaching();

            this.AssociatedObject.Drop -= OnDrop;
        }
        #endregion

        #region OnDrop
        /// <summary>
        /// ドロップ時のイベントを実行します。
        /// </summary>
        /// <param name="sender">送信オブジェクト</param>
        /// <param name="e">イベントデータ</param>
        private void OnDrop(object sender, DragEventArgs e)
        {
            string[] files = (string[])e.Data.GetData("FileName");
            if (Command != null)
            {
                Command.Execute(files);
            }
        }
        #endregion
    }
}